/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.myapp.actions;

import com.myapp.bd.QueryBD;
import com.myapp.bean.Etudiant;
import com.myapp.forms.UploadForm;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author manoa
 */
public class UploadAction extends Action {
    
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, SQLException {
        UploadForm uploadForm = (UploadForm) form;
        
        //dans le cas d'un envoi de fichier
        if (uploadForm.getType().equalsIgnoreCase("envoi")) {
            FileOutputStream outputStream = null;
            
            //FormFile pour récupérer le fichier uploadé dans la jsp
            FormFile fichier = null;
            //recuperation du chemin du fichier
            String path = getServlet().getServletContext().getRealPath("/");
            // home --> faire un getProperty sur user-home
           
            QueryBD queryBD = new QueryBD();

            try {
                //on récupère le fichier dans la jsp
                fichier = uploadForm.getFichier();
                //on crée u nnouveau fichier dans le chemin path
                File nouveauFichier = new File(path,""+fichier.getFileName());
                outputStream = new FileOutputStream(nouveauFichier);
                outputStream.write(fichier.getFileData());
                String chemin= nouveauFichier.getAbsolutePath();
                String typeUtilisateur=uploadForm.getTypeUtilisateur();
                int nUtilisateur=uploadForm.getnUtilisateur();
                String typeFichier=uploadForm.getTypeFichier();
                Date datedepot= new Date();
                SimpleDateFormat formatDateJour = new SimpleDateFormat("dd/MM/yyyy kk:mm:ss");
                String dateFormatee = formatDateJour.format(datedepot);
                System.out.println("Date formatée : " + dateFormatee);
                queryBD.ajoutFichierBd( typeFichier, chemin, typeUtilisateur, nUtilisateur,dateFormatee);
                
            } finally {
                if (outputStream != null) {
                    outputStream.close();
                }
            }
            
            uploadForm.setMessage("Le fichier" + fichier.getFileName() + " a ete envoyé.");
            return mapping.findForward("UploadFichier");
        } else {
            
            String path = getServlet().getServletContext().getRealPath("/");
            //nom du fichier
            String name = "ext";
           /* récupération du nom du fichier à telecharger*/
            StringBuffer nom = new StringBuffer();
            // home --> faire un getProperty sur user-home
            nom.append("").append(path).append("ext.pdf");
            // convertir le StringBuffer en String
            String nomFichier = nom.toString();
            //MIme-type du fichier , ici c'est un pdf
            response.setContentType("application/pdf"); 
            response.setHeader("Content-Disposition", "attachment; filename=" + name);
            File f = new File(nomFichier);
            // pour lire à partir d'une position aléatoire dans le fichier
            RandomAccessFile fichier = new RandomAccessFile(f, "r");
            //on récupère la taille du fichier
            response.setContentLength((int) fichier.length());
            ServletOutputStream sortie = response.getOutputStream();
            // on crée un tableau de byte de la taille du fichier
            byte[] b = new byte[(int) fichier.length()];
            //on lit le tableau de byte
            while ((fichier.read(b)) > 0) {
                sortie.write(b);
            }
            sortie.flush();
            sortie.close();
            return mapping.findForward("");
        }
        
    }
}
